<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		
		<meta name="Description" content="" />
        <meta name="Keywords" content="" />
        
		<title>XSLT Templater - Documentation</title>
		
		<link href="style.css" rel="stylesheet" type="text/css" />
		
	</head>

	<body>
	
		<div id="menu">
			<a href="index_ru.html"><img src="XSLTTemplater_200.png" alt="XSLT Templater"/></a>
			<ul>
				<li>
					<a href="#plugin" title="О плагине">О плагине</a>
				</li>
				<li>
					<a href="#calling" title="Различные способы вызова">Различные способы вызова</a>
				</li>
				<li>
					<a href="#callbacks" title="Обратные вызовы">Обратные вызовы</a>
				</li>
				<li>
					<a href="#ucache" title="Работа с пользовательским кэшем">Работа с пользовательским кэшем</a>
				</li>
				<li>
					<a href="#mucache" title="Методы пользовательского кэша">Методы пользовательского кэша</a>
				</li>
				<li>
					<a href="#bcache" title="Работа с базовым кэшом">Работа с базовым кэшом</a>
				</li>
				<li>
					<a href="#sbcache" title="Настройка базового кэша">Настройка базового кэша</a>
				</li>
				<li>
					<a href="#example" title="Комплексный пример">Комплексный пример</a>
				</li>
			</ul>
		</div>
		
		<div id="content_block">
			<h3><a name="plugin">О плагине</a></h3>
			<p><strong>XSLT Templater</strong>  - плагин для фреймворка jQuery, реализующий следующие задачи:</p>
			<ol>
				<li><strong>XML/XSLT процессинг</strong>
					<p>Плагин позволяет произвести XSLT преобразования для предаваемых в качестве аргументов xml и xsl. Причем xml и xsl могут предоставляться в трех формах:</p>
					<ul>
						<li><em>Строковое представление</em>
							<p>В этом случае плагин самостоятельно распарсит строковое представление XML, и произведет необходимые вычисления.</p>
						</li>
						<li><em>Ссылка на файл/ресурс</em>
							<p>Плагин с помощью AJAX загрузит необходимые данные из внешнего источника (в пределах домена) и произведит необходимые преобразования.</p>
						</li>
						<li><em>XMLDocument</em>
							<p>В такой ситуации плагин не будет производить каких-либо дополнительных операций, а будет сразу использовать аргумент в виде XMLDocument при XSLT процессинге.</p>
						</li>
					</ul>
					<p>Три формы представления позволяются разработчику настроить свою систему кэширования, для организации специфической шаблонизации.</p>
				</li>
				<li><strong>Кэширование XML/XSLT на двух уровнях</strong>
					<p>Кэширование позволяет организовать хранение xml/xsl для повторного использования, что и реализует базовые возможности для шаблонизации с вычислительными возможностями XSLT. Кэширование организуется на двух уровнях:</p>
					<ul>
						<li><em>Пользовательский уровень</em>
							<p>Пользователь самостоятельно управляет кэшированием с доступом только к результатам последнего преобразования.</p>
						</li>
						<li><em>Базовый уровень</em>
							<p>Внутреннее кэширование плагина, включенное по умолчанию и кэширующее только xsl.</p>
						</li>
					</ul>
					<p>Кэширование ведется, только для  аргументов со строковым типом – строковое представление xml  или ссылка на ресурс.
					Оба уровня кэширования можно использовать совместно, но при этом они являются полностью независимыми.
					Внутренне кэширование предполагает, что пользователь контролирует порядок вызовов нескольких преобразований
					над одинаковыми входными данными. Иными словами, два идентичных последовательных вызова преобразования
					будут работать в силу асинхронности с идентичным состоянием кэша, что означает, что одинаковые ресурсы
					могут быть загружены несколько раз. Однако, существует механизм позволяющий организовывать цепочки
					преобразований, на основе обратных вызовов. Этот механизм позволяет  установить четкую очередь
					обработки вызовов, что позволяет использовать актуальное состояние кэша при каждом отдельном
					преобразовании.</p>
				</li>
			</ol>
			<p>Плагин поддерживает следующие браузеры: <em>IE 6+, Firefox, Opera, Chrome, Safari</em></p>
			
			<h3><a name="calling">Различные способы вызова</a></h3>
			<p>Преобразования осуществляются контекстно - относительно элемента контейнера для результирующего представления. И исходный xml и xsl могут представляться в трех различных формах.</p>
			<ul>
				<li><strong>Строковые представления</strong>
					<p>Пусть существуют следующие строковые представления:</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #3366CC;">&quot;&lt;xml-message&gt;&quot;</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">&quot;&lt;message&gt;It working with string representation of xml&lt;/message&gt;&quot;</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">&quot;&lt;/xml-message&gt;&quot;</span></pre>

					<p>и</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #3366CC;">'&lt;?xml version=&quot;1.0&quot;?&gt;'</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">'&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; version=&quot;1.0&quot;&gt;'</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">'&lt;xsl:template match=&quot;xml-message&quot;&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;p&gt;Result: &lt;xsl:value-of select=&quot;message/text()&quot;/&gt;!&lt;/p&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;/xsl:template&gt;'</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">'&lt;/xsl:stylesheet&gt;'</span></pre>

					<p>Тогда вызов xml/xsl трансформации будет выглядеть следующим образом:</p>

<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;xml-message&gt;&quot;</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">&quot;&lt;message&gt;It working with string representation of xml&lt;/message&gt;&quot;</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">&quot;&lt;/xml-message&gt;&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'&lt;?xml version=&quot;1.0&quot;?&gt;'</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">'&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; version=&quot;1.0&quot;&gt;'</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">'&lt;xsl:template match=&quot;xml-message&quot;&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;p&gt;Result: &lt;xsl:value-of select=&quot;message/text()&quot;/&gt;!&lt;/p&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;/xsl:template&gt;'</span><span style="color: #339933;">+</span>
<span style="color: #3366CC;">'&lt;/xsl:stylesheet&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre> 

					<p>или</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> xmlString <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&lt;xml-message&gt;&quot;</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">&quot;&lt;message&gt;It working with string representation of xml&lt;/message&gt;&quot;</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">&quot;&lt;/xml-message&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> xslString <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;?xml version=&quot;1.0&quot;?&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; version=&quot;1.0&quot;&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;xsl:template match=&quot;xml-message&quot;&gt;'</span><span style="color: #339933;">+</span>
				<span style="color: #3366CC;">'&lt;p&gt;Result: &lt;xsl:value-of select=&quot;message/text()&quot;/&gt;!&lt;/p&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;/xsl:template&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;/xsl:stylesheet&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
 $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>
 
				</li>
				<li><strong>Ссылка на ресурс</strong>
					<p>Пусть существует следующий файл или скрипт возвращающий следующую структуру:</p>

					<em>/tests/data/message.xml</em>
					
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xml-message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>It working with loading xml file<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xml-message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre>

					<p>и</p>

					<em>/tests/xslt/message-template.xsl</em>
					
<pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xsl:stylesheet</span> <span style="color: #000066;">xmlns:xsl</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/1999/XSL/Transform&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xsl:template</span> <span style="color: #000066;">match</span>=<span style="color: #ff0000;">&quot;xml-message&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Result: <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xsl:value-of</span> <span style="color: #000066;">select</span>=<span style="color: #ff0000;">&quot;message/text()&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> and loading xslt file!<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xsl:template<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xsl:stylesheet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre>

<p>В этом случае вызов будет осуществляться следующим образом:</p>

<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

				</li>
				<li><strong>В виде XMLDocument</strong> (см.  Работа с пользовательским кешем)
				</li>
			</ul>

<p>Комплексный пример:</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> xslString <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;?xml version=&quot;1.0&quot;?&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; version=&quot;1.0&quot;&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;xsl:template match=&quot;xml-message&quot;&gt;'</span><span style="color: #339933;">+</span>
				<span style="color: #3366CC;">'&lt;p&gt;Result: &lt;xsl:value-of select=&quot;message/text()&quot;/&gt;!&lt;/p&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;/xsl:template&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;/xsl:stylesheet&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span>xslString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

			<h3><a name="callbacks">Обратные вызовы</a></h3>
		
			<p>Для синхронизации работы нескольких вызовов и организации работы с кэшом существует механизм обратных вызовов:</p>
			
<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	console.<span style="color: #660066;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Text message after transformation!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

			<p>Этот механизм позволяет организовывать цепочки вызовов, причем каждый обратный вызов уже будет иметь доступ к состоянию кеша после предыдущего вызова:</p>
			
<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> xslString <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;?xml version=&quot;1.0&quot;?&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; version=&quot;1.0&quot;&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;xsl:template match=&quot;xml-message&quot;&gt;'</span><span style="color: #339933;">+</span>
				<span style="color: #3366CC;">'&lt;p&gt;Result: &lt;xsl:value-of select=&quot;message/text()&quot;/&gt;!&lt;/p&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;/xsl:template&gt;'</span><span style="color: #339933;">+</span>
		<span style="color: #3366CC;">'&lt;/xsl:stylesheet&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test3'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #339933;">,</span>  <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test4'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			console.<span style="color: #660066;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Text message after all transformations &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

			<h3><a name="ucache">Работа с пользовательским кэшем</a></h3>
			
			<p>Пользовательский (локальный) кэш необходим для самостоятельного контроля кэширования внутри шаблонизатора. Локальный кэш передается непосредственно в функцию преобразования, поэтому с его помощью существует доступ только к результатам кэширования последнего выполненного преобразования. Если локальный кэш передается в качестве аргумента, то необходимо получить экземпляр локального кэша:</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> xsltCache <span style="color: #339933;">=</span> $.<span style="color: #660066;">getXSLTLocalCache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
	onUnlock<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>state<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		console.<span style="color: #660066;">debug</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'New value in cache'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

			<p>Теперь этот экземпляр можно использовать в вызовах:</p>

<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test3'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xsltCache.<span style="color: #660066;">getXmlDoc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			 <span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>xsltCache<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #006600; font-style: italic;">// using result of caching xml representation in callback function</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>xsltCache<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// insert local cache to transformation function and switch off base cache </span></pre>

			<p>В приведенном примере стоит обратить внимание на следующие особенности:</p>
			<ul>
				<li><strong>xsltCache.getXmlDoc()</strong> – получение XMLDocument исходного xml из предыдущего вызова</li>
				<li><strong>…null,xsltCache,false… во внутреннем вызове</strong> - null вместо функции обратного вызова, повторное использование локального кэша, полное отключение внутреннего (базового) кэширования плагина</li>
			</ul>
			<p>Таким образом, после обработки первого вызова экземпляр кэша будет содержать XMLDocument для xml и xsl, которые можно использовать повторно.</p> 

			<h3><a name="mucache">Методы пользовательского кэша</a></h3>
			<table>
				<tbody>
					<tr>
						<th>
						Методы
						</th>
						<th>
						Описание
						</th>
					</tr>
					<tr>
						<td>
						checkXmlDoc()
						</td>
						<td>
						Проверяет наличие в xml кэше значения. Возвращает true, если значение установлено, false – в обратном случае
						</td>
					</tr>
					<tr>
						<td>
						checkXslDoc()
						</td>
						<td>
						Проверяет наличие в xsl кэше значения. Возвращает true, если значение установлено, false – в обратном случае
						</td>
					</tr>
					<tr>
						<td>
						getXmlDoc()
						</td>
						<td>
						Возвращает значение xml кэша. Если значение не было установлено, то возвращает false
						</td>
					</tr>
					<tr>
						<td>
						getXslDoc()
						</td>
						<td>
						Возвращает значение xsl кэша. Если значение не было установлено, то возвращает false
						</td>
					</tr>
					<tr>
						<td>
						lock()
						</td>
						<td>
						Сервисный метод для проверки возможности работы с кэшом. Имеет только информативный смысл.  
						</td>
					</tr>
					<tr>
						<td>
						setXmlDoc(xml)
						</td>
						<td>
						Устанавливает новое значение xml кэша. Используется внутри плагина.
						</td>
					</tr>
					<tr>
						<td>
						setXslDoc(xml)
						</td>
						<td>
						Устанавливает новое значение xsl кэша. Используется внутри плагина.
						</td>
					</tr>
					<tr>
						<td>
						reset
						</td>
						<td>
						Сбрасывает все значения кэша
						</td>
					</tr>
					<tr>
						<td>
						unlock
						</td>
						<td>
						Сервисный метод для проверки возможности работы с кэшом. Имеет только информативный смысл.  
						</td>
					</tr>
				</tbody>
			</table>

			<h3><a name="bcache">Работа с базовым кэшом</a></h3>
			
			<p>Базовый кэш используется внутри плагина для оптимизации преобразований. Кэширование происходит на основе строкового ключа (строковое представление xml или ссылка на ресурс) Возможны четыре состояния внутреннего кэша:</p>
			<ul>
				<li><strong>Кэшируется только xsl – режим по умолчанию</strong>
					<p>Этот режим предполагает ситуацию, когда шаблон загружается только один раз, а данные периодически обновляются. В этом случае подготовка шаблона к преобразованиям будет произведена только один раз.</p>
				</li>
				<li><strong>Кэшируется только xml</strong>
					<p>В этом режиме предполагается, что для одних, статических данных меняется только форма представления (шаблон)</p>
				</li>
				<li><strong>Кешируется и xml, и xsl</strong>
					<p>В этом случае предполагается, что и данные и представление являются статическим. Как правило, данный вариант используется, когда существует неопределенность о возможности повторной загрузки статического контента.</p>
				</li>
				<li><strong>Кеширование не происходит</strong></li>
			</ul>

			<h3><a name="sbcache">Настройка базового кэша</a></h3>
			
			<p>Для четырех различных случаев кэширование настраивается по-разному:</p>
			<ul>
				<li><em>Кэшируется только xsl – режим по умолчанию</em>

<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </pre>

				<p>или</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> cache <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #3366CC;">&quot;xml&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;xsl&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span>
<span style="color: #009900;">&#125;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>cache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </pre> 

				</li>
				<li><em>Кэшируется только xml</em>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> cache <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #3366CC;">&quot;xml&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;xsl&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span>
<span style="color: #009900;">&#125;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>cache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </pre>

				</li>
				<li><em>Кешируется и xml, и xsl</em>

<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre> 

				<p>или</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> cache <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #3366CC;">&quot;xml&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;xsl&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span>
<span style="color: #009900;">&#125;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>cache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre> 

				</li>
				<li><em>Кеширование не происходит</em>

<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre> 

				<p>или</p>

<pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> cache <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #3366CC;">&quot;xml&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;xsl&quot;</span><span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span>
<span style="color: #009900;">&#125;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span>cache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </pre>
				
				</li>
			</ul>
			
			<h3><a name="example">Комплексный пример</a></h3>
			
			<pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> time <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> xmlString <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&lt;xml-message&gt;&quot;</span><span style="color: #339933;">+</span>
				<span style="color: #3366CC;">&quot;&lt;message&gt;It working with string representation of xml&lt;/message&gt;&quot;</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">&quot;&lt;/xml-message&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> xslString <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;?xml version=&quot;1.0&quot;?&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; version=&quot;1.0&quot;&gt;'</span><span style="color: #339933;">+</span>
				<span style="color: #3366CC;">'&lt;xsl:template match=&quot;xml-message&quot;&gt;'</span><span style="color: #339933;">+</span>
			    		<span style="color: #3366CC;">'&lt;p&gt;Result: &lt;xsl:value-of select=&quot;message/text()&quot;/&gt;!&lt;/p&gt;'</span><span style="color: #339933;">+</span>
				<span style="color: #3366CC;">'&lt;/xsl:template&gt;'</span><span style="color: #339933;">+</span>
			<span style="color: #3366CC;">'&lt;/xsl:stylesheet&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
    	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span>xslString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> xsltCache <span style="color: #339933;">=</span> $.<span style="color: #660066;">getXSLTLocalCache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
		onUnlock<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>state<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			console.<span style="color: #660066;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Text message after setting new value in local cache!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test2'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/tests/data/message.xml&quot;</span><span style="color: #339933;">,</span>xslString<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test3'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xsltCache.<span style="color: #660066;">getXmlDoc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
				 <span style="color: #3366CC;">&quot;/tests/xslt/message-template.xsl&quot;</span><span style="color: #339933;">,</span>  <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#test4'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">xslt</span><span style="color: #009900;">&#40;</span>xsltCache.<span style="color: #660066;">getXmlDoc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
							 xsltCache.<span style="color: #660066;">getXslDoc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
							 <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003366; font-weight: bold;">var</span> time2 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#time&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Calculating time:&quot;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>time2<span style="color: #339933;">-</span>time<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>xsltCache<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>xsltCache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
    	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>xsltCache<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;</pre>

		</div>
		
		<div id="copyright">
			Copyright © 2010 <a href="mailto:tsarev.oi@mail.ru">Oleg Tsarev</a>
		</div>

	</body>
</html>